package org.gestorTareas.actions;

import java.util.List;

import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import org.gestorTareas.model.dao.UsuarioDao;
import org.gestorTareas.model.dto.Usuario;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class UsuarioAction extends ActionSupport implements ModelDriven<Usuario> {

	private List<Usuario> usuarios;
	private Usuario usuario = new Usuario();
	
	private static Logger logger = Logger.getLogger(UsuarioAction.class);

	public String findUsuariosAll(){
		try{
			WebApplicationContext context = WebApplicationContextUtils
					.getRequiredWebApplicationContext(ServletActionContext
							.getServletContext());
			UsuarioDao servicio = (UsuarioDao) context.getBean("UsuarioDao");
			this.usuarios = servicio.list(Usuario.class);
		} catch(Exception ex){
			logger.error(ex);
			addActionError(getText("mensaje.error.general"));
			return ERROR;
		}
		return SUCCESS;
	}

	public String findUsuarios(){
		try{
			WebApplicationContext context = WebApplicationContextUtils
					.getRequiredWebApplicationContext(ServletActionContext
							.getServletContext());

			UsuarioDao servicio = (UsuarioDao) context.getBean("UsuarioDao");
			this.usuarios = servicio.getUsuariosByDto(usuario);
		} catch(Exception ex){
			logger.error(ex);
			addActionError(getText("mensaje.error.general"));
			return ERROR;
		}		

		return SUCCESS;
	}

	public String setupNewEditUsuario(){
		try{
			if(usuario.getId() != null && usuario.getId() >= 0){
				WebApplicationContext context = WebApplicationContextUtils
						.getRequiredWebApplicationContext(ServletActionContext
								.getServletContext());

				UsuarioDao servicio = (UsuarioDao) context.getBean("UsuarioDao");
				this.usuario = (Usuario)servicio.get(usuario.getId(), usuario);
			}
		} catch(Exception ex){
			logger.error(ex);
			addActionError(getText("mensaje.error.general"));
			return ERROR;
		}
		return SUCCESS;
	}

	public String newUsuario(){
		try{
			WebApplicationContext context = WebApplicationContextUtils
					.getRequiredWebApplicationContext(ServletActionContext
							.getServletContext());

			UsuarioDao servicio = (UsuarioDao) context.getBean("UsuarioDao");
			servicio.save(usuario);
		} catch(Exception ex){
			logger.error(ex);
			addActionError(getText("mensaje.error.general"));
			return ERROR;
		}

		return SUCCESS;
	}
	
	public String editUsuario(){
		try{
			WebApplicationContext context = WebApplicationContextUtils
					.getRequiredWebApplicationContext(ServletActionContext
							.getServletContext());

			UsuarioDao servicio = (UsuarioDao) context.getBean("UsuarioDao");
			servicio.update(usuario);
		} catch(Exception ex){
			logger.error(ex);
			addActionError(getText("mensaje.error.general"));
			return ERROR;
		}
		return SUCCESS;
	}
	
	public String deleteUsuario(){
		try{
			WebApplicationContext context = WebApplicationContextUtils
					.getRequiredWebApplicationContext(ServletActionContext
							.getServletContext());

			UsuarioDao servicio = (UsuarioDao) context.getBean("UsuarioDao");
			servicio.delete(usuario);
		} catch(Exception ex){
			logger.error(ex);
			addActionError(getText("mensaje.error.general"));
			return ERROR;
		}
		return SUCCESS;
	}

	public List<Usuario> getUsuarios() {
		return usuarios;
	}

	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public Usuario getModel() {
		return usuario;
	}

}
